/**
 * Event.EventManager 单例类
 * 此类是对浏览器事件模型的封装， 目的是解决兼容性
 * Ext的事件分为两部分，一个是前面实现的Obserable类，这个类的作用是提供自定义事件的接口，而这个类的目的是兼容性
 * 但是两者提供了相同的接口, 即on()和un()函数，此处自己模仿实现EventManager
 */
(function() {
	
	var EventManager = {
		/**
		 * 添加监听器
		 * @param 需要添加监听器的元素(DOM)
		 * @param event 事件名称
		 * @param fn 回调函数
		 * @param progation 如果为false那么在捕获阶段调用，否则冒泡阶段
		 */
		addListener: function(element, event, fn, progation) {
			if (element.addEventListener) {
				element.addEventListener(event, fn, progation);
			} else if (element.attachEvent) {
				//IE 6/7/8
				element.attachEvent("on" + event, fn);
			}
		},
		
		/**
		 * 移除监听器
		 * 参数同上
		 */
		removeListener: function(element, event, fn, progation) {
			if (element.removeEventListener) {
				element.removeEventListener(event, fn, progation);
			} else if (element.detachEvent) {
				element.detachEvent(event, fn);
			}
		}
	};
	
	//简写方法, 注意只有function才有prototype
	EventManager.on = EventManager.addListener;
	EventManager.un = EventManager.removeListener;
	
	//测试
	window.onload = function() {
		
		var fn = function() {
			alert("点我干嘛!");
			EventManager.un(Ext.getDom("btn"), "click", fn, true);
		};
		
		EventManager.on(Ext.getDom("btn"), "click", fn, true);
	}
	
})();